const mysql = require('mysql2/promise');

/**
 * 手动创建数据库表，避免TypeORM的synchronize问题
 */
async function createTablesManually() {
    console.log('🔧 手动创建数据库表...');

    const connection = await mysql.createConnection({
        host: '43.143.253.188',
        port: 3306,
        user: 'nextjs',
        password: 'yEAiRE2jcxTyRBy5',
        database: 'nextjs',
        timezone: '+08:00'
    });

    try {
        // 设置MySQL会话配置
        await connection.execute("SET SESSION sql_mode = ''");
        await connection.execute("SET SESSION time_zone = '+08:00'");
        await connection.execute("SET SESSION FOREIGN_KEY_CHECKS=0");
        console.log('✅ MySQL会话配置设置完成');

        // 创建areas表
        await connection.execute(`
            CREATE TABLE IF NOT EXISTS \`areas\` (
                \`id\` int NOT NULL AUTO_INCREMENT,
                \`name\` varchar(100) NOT NULL COMMENT '区域名称',
                \`style\` int NOT NULL DEFAULT 0 COMMENT '区域样式',
                \`state\` int NOT NULL DEFAULT 1 COMMENT '区域状态',
                \`mod_dstid\` int DEFAULT NULL COMMENT '模块目标ID',
                \`descr\` text COMMENT '区域描述',
                \`ol_count\` int NOT NULL DEFAULT 0 COMMENT '在线人数',
                \`order_lvl\` int NOT NULL DEFAULT 0 COMMENT '排序等级',
                \`ol_limit\` int NOT NULL DEFAULT 100 COMMENT '在线人数限制',
                \`socket_port\` int DEFAULT NULL COMMENT 'Socket端口',
                \`socket_ip\` varchar(50) DEFAULT NULL COMMENT 'Socket IP',
                \`created_at\` datetime NOT NULL COMMENT '创建时间',
                \`updated_at\` datetime NULL DEFAULT NULL COMMENT '更新时间',
                PRIMARY KEY (\`id\`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='区域表'
        `);
        console.log('✅ areas表创建成功');

        // 创建character_skills表
        await connection.execute(`
            CREATE TABLE IF NOT EXISTS \`character_skills\` (
                \`id\` int NOT NULL AUTO_INCREMENT,
                \`characterId\` int NOT NULL COMMENT '角色ID',
                \`skillId\` int NOT NULL COMMENT '技能ID',
                \`grade\` int NOT NULL DEFAULT 0 COMMENT '技能等级',
                \`hua\` int NOT NULL DEFAULT 0 COMMENT '技能花数',
                \`useCount\` int NOT NULL DEFAULT 0 COMMENT '使用次数',
                \`skillType\` int NOT NULL COMMENT '技能类型：1-武士，2-文人，3-异师，0-特殊',
                \`skillName\` varchar(50) NOT NULL COMMENT '技能名称',
                \`skillSide\` int NOT NULL COMMENT '技能方向：1-攻击，2-防御',
                \`skillShort\` varchar(10) NOT NULL COMMENT '技能简称',
                \`skillAni\` varchar(50) NOT NULL COMMENT '技能动画',
                \`status\` int NOT NULL DEFAULT 0 COMMENT '技能状态：0-未激活，1-已激活',
                \`obtainedAt\` datetime NOT NULL COMMENT '获得时间',
                \`created_at\` datetime NOT NULL COMMENT '创建时间',
                \`updated_at\` datetime NULL DEFAULT NULL COMMENT '更新时间',
                PRIMARY KEY (\`id\`),
                UNIQUE KEY \`uk_character_skill\` (\`characterId\`, \`skillId\`),
                KEY \`idx_characterId\` (\`characterId\`),
                KEY \`idx_skillId\` (\`skillId\`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='角色技能表'
        `);
        console.log('✅ character_skills表创建成功');

        // 创建users表
        await connection.execute(`
            CREATE TABLE IF NOT EXISTS \`users\` (
                \`id\` int NOT NULL AUTO_INCREMENT,
                \`mobile\` varchar(32) NOT NULL,
                \`passwordHash\` varchar(64) NOT NULL,
                \`channel\` varchar(64) DEFAULT NULL,
                \`inviteCode\` varchar(64) DEFAULT NULL,
                \`created_at\` datetime NOT NULL COMMENT '创建时间',
                \`updated_at\` datetime NULL DEFAULT NULL COMMENT '更新时间',
                PRIMARY KEY (\`id\`),
                UNIQUE KEY \`IDX_mobile\` (\`mobile\`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表'
        `);
        console.log('✅ users表创建成功');

        console.log('🎉 数据库表创建完成！');

    } catch (error) {
        console.error('❌ 创建数据库表失败:', error.message);
        throw error;
    } finally {
        await connection.end();
    }
}

// 执行创建
createTablesManually()
    .then(() => {
        console.log('✅ 数据库表创建脚本执行完成');
        process.exit(0);
    })
    .catch((error) => {
        console.error('💥 数据库表创建脚本执行失败:', error.message);
        process.exit(1);
    });
